package com.gdlgxy.oa.bean;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

public class Fare implements Node{
    /**
     * 支出编号
     */
    int Fno;

    /**
     * 支出种类
     */
    int Kno;

    /**
     * 支出的金额
     */
    double money;

    /**
     * 支出时间
     */
    Date date;

    /**
     * 支出备注
     */
    String remark;

    /**
     * 下一个支出
     */
    Fare next;

    /**
     * 支出
     * @param Fno 支出编号
     * @param kno    支出种类
     * @param money  支出金额
     * @param date  支出时间
     * @param remark 支出备注
     */
    public Fare(int Fno,int kno, double money, Date date, String remark) {
        setFno(Fno);
        setKno(kno);
        setMoney(money);
        setDate(date);
        setRemark(remark);
    }
    /**
     * 支出,随机生成金额
     * @param Fno 支出编号
     * @param kno    支出种类
     * @param remark 支出备注
     */
    public Fare(int Fno,int kno, Date date, String remark) {
        setFno(Fno);
        setKno(kno);
        randomMoney();
        setDate(date);
        setRemark(remark);
    }

    /**
     * 执行该方法，说明当前的支出费用随机生成
     */
    public void randomMoney() {
        Random random = new Random();

        if (getKno() == 1) {
            Double num = random.nextDouble(6001 - 3600);
            setMoney(num + 3600);
        } else if (getKno() == 2) {
            setMoney(random.nextDouble(2001));
        } else if (getKno() == 3) {
            setMoney(random.nextDouble(1001));
        } else if (getKno() == 4) {
            setMoney(random.nextDouble(501));
        } else if (getKno() == 5) {
            setMoney(random.nextDouble(2001));
        }
        // 数字保留两位小数
        setMoney(Double.parseDouble(String.format("%.2f", getMoney())));
    }

    public int getKno() {
        return Kno;
    }

    public void setKno(int kno) {
        if (kno <= 0 || kno >= 6) {
            throw new RuntimeException("警告：输入的支出种类非法");
        }
        this.Kno = kno;

    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        if (money < 0) {
            throw new RuntimeException("错误：金钱非法！！！");
        }
        this.money = money;
    }

    public String getDate() {
        if (date != null) {
            SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日-HH时mm分ss秒");
            String s = format.format(date);
            return s;
        }
        return "";
    }

    public Date getSQLDate(){
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getRemark() {
        if (null == remark) {
            return "";
        }
        return this.remark;
    }

    public void setRemark(String remark) {
        this.remark = remark;
    }

    public Fare getNext() {
        return next;
    }

    public void setNext(Fare next) {
        this.next = next;
    }

    public int getFno() {
        return Fno;
    }

    public void setFno(int fno) {
        Fno = fno;
    }


    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Fare fare = (Fare) o;
        return Fno == fare.Fno && Kno == fare.Kno && Double.compare(fare.money, money) == 0 && date.equals(fare.date) && remark.equals(fare.remark);
    }
}
